* Run annex.freezecontent-command and annex.thawcontent-command
when on a crippled filesystem.
Thanks, Reiko Asakura
+ * Let GIT_DIR and --git-dir override git's protection against operating
+ in a repository owned by another user.
-- Joey Hess <id@joeyh.name> Mon, 29 Aug 2022 15:03:04 -0400
read' :: Repo -> IO Repo
read' repo = go repo
where
- go Repo { location = Local { gitdir = d } } = git_config d
- go Repo { location = LocalUnknown d } = git_config d
+ go Repo { location = Local { gitdir = d } } = git_config True d
+ go Repo { location = LocalUnknown d } = git_config False d
go _ = assertLocal repo $ error "internal"
- git_config d = withCreateProcess p (git_config' p)
+ git_config isgitdir d = withCreateProcess p (git_config' p)
where
- params = ["config", "--null", "--list"]
+ params =
+ -- Passing --git-dir changes git's behavior
+ -- when run in a repository belonging to another
+ -- user. When a gitdir is known, pass that in order
+ -- to get the local git config.
+ (if isgitdir && gitDirSpecifiedExplicitly repo
+ then ["--git-dir=."]
+ else [])
+ ++ ["config", "--null", "--list"]
p = (proc "git" params)
{ cwd = Just (fromRawFilePath d)
, env = gitEnv repo
{ gitdir = absd
, worktree = Just curr
}
- r <- Git.Config.read $ newFrom loc
- let r' = r { gitDirSpecifiedExplicitly = True }
- return $ if Git.Config.isBare r'
- then r' { location = (location r) { worktree = Nothing } }
- else r'
+ r <- Git.Config.read $ (newFrom loc)
+ { gitDirSpecifiedExplicitly = True }
+ return $ if Git.Config.isBare r
+ then r { location = (location r) { worktree = Nothing } }
+ else r
configure Nothing Nothing = giveup "Not in a git repository."
addworktree w r = changelocation r $ Local